	SUBROUTINE GERACONT(PARG,XL_EL,X,Y,NUMPC,FRES,INC,NFIX,
     &			NN,N_eq,npa0) 

	implicit double precision(a-h,o-z)
	
	INCLUDE 'param_dim.inc'
	
	common /NPAR/ NPAR
	
	COMMON /incdata/ C0,CINC,NNINC,NUMPI,NUMPCI,NINCL,VARIA
! 	common/plotcav/NNINCaux,NINCLaux
	common /triang/ct
	real ct(nparg_max/2,6)
	DIMENSION NNINC(ninc_max),CINC(ninc_max)
	integer NUMPI(ninc_max),NUMPCI(ninc_max)
	integer VARIA(ninc_max)
	
	DIMENSION NNINCaux(ninc_max)
	dimension xlac(ntmx-1),t(ntmx),xt(ntmx),yt(ntmx),
     &            xk(NPC_MAX+3),yk(NPC_MAX+3),sk(NPC_MAX+3),  
     &            tel(NX),sel(NX),
     &            X(NX),Y(NX),INC(NX,2)

	real*8 PARG(nparg_max)
	integer fres


	integer PCnnp(nparg_max) ! conta qtos nohs parametros cada ponto de controle influencia
	integer PCnp(nparg_max,NX) ! guarda quais nohs parametros cada ponto de controle influencia
	double precision PCgama(nparg_max,NX) ! guarda os pesos com que cada PC influencia cada noh parametro
	double precision PCgamaSx(nparg_max,NX),PCgamaSy(nparg_max,NX)! guarda os pesos com que cada parametro S dos PCs influencia cada Coordenada X ou Y dos nohs parametros

	common/dadossensib/PCnnp,PCnp,PCgama,PCgamaSx,PCgamaSy


C     GERA UMA SPLINE PARA CADA INCLUSAO E ACUMULA O NUMERO DE NOS 
C     DE CADA SPLINE REFERENTE A INCLUS�O i NO VETOR NNINC(i)


C     Inicializa Numero de Equa��es e numero de nos acumulado.
	N_Eq = NFIX
	NN = NFIX
	nna = NN
	nna0= NN


	
C     Parametros Geometricos
	npa0= 0
	
	do iincl=1,nincl

C     Numero de parametros geometricos da inclusao e 
            npi= numpci(iincl)*3	



C     Numero de parametros geometricos 
C     acumulado das inclusoes anteriores.
            npa0= npa0 + npi
    
            !  write(*,*) 'Parametros da Spline:',npi/2
            !  write(*,*) 'Par.       X         Y'
            write(fres,*) 'Parametros da Spline:',npi/3
            write(fres,*) 'Par.       X         Y'
    
            !  write(*,1100) (i,parg(2*i-1), parg(2*i), i=1,npi/2)
            write(fres,1100)(i,PARG(3*i-2),PARG(3*i-1),
     &              PARG(3*i),i=1,npi/3)
 1100       format( i5,3f10.4)

C     Calcula o numero total de pontos para a
C     definicao da XSPLINE e os respectivos t.

            nk=npi/3+1
            
            xk(1)=PARG((npa0-npi)+npi-2)
            yk(1)=PARG((npa0-npi)+npi-1)
            sk(1)=PARG((npa0-npi)+npi  )


            do i= 1,npi/3
                xk(i+1)=PARG((npa0-npi)+i*3-2)
                yk(i+1)=PARG((npa0-npi)+i*3-1)
                sk(i+1)=PARG((npa0-npi)+i*3  )
            end do

            xk(nk+1)=PARG((npa0-npi)+1)
            yk(nk+1)=PARG((npa0-npi)+2)
            sk(nk+1)=PARG((npa0-npi)+3)
    

            xk(nk+2)=PARG((npa0-npi)+4)
            yk(nk+2)=PARG((npa0-npi)+5)
            sk(nk+2)=PARG((npa0-npi)+6)

! 		sk(1)=0
! 		do i=2,nk+1
! 			sk(i)=1
! 		end do
! 		sk(nk+2)=0
          
       
! 		do i=1,nk+2
! 			write(*,*) xk(i),yk(i),sk(i)
! 		end do

c       !  write(*,*) 'nk= ',nk

            nt= ntint*(nk-1) + nk
            dlt= 1.d0/(ntint+1)
            
            
            do it=1,nt
                    t(it)= (it-1)*dlt
            end do
		
            idadossensib = 0 ! nao salva dados uteis para calculo das sensibilidades
            call xsplxy(xk,yk,sk,t,xt,yt,nk,nt,
     &			nna0,nfix,npa0-npi,idadossensib) 


C     Calcula o comprimento dos segmentos da XSPLINE

C     Zera os comprimentos
            do it=1,nt
                    xlac(it)=0.d0
            end do

            do it=1,nt-1
                dltx= (xt(it+1)-xt(it))
                dlty= (yt(it+1)-yt(it))
                xlac(it+1)=xlac(it)+sqrt(dltx*dltx+dlty*dlty)
            end do

!                 write(*,*)nt,xlac(nt),dltx,dlty
		NPAR=int(xlac(nt)/XL_EL)

C     NUMERO DE ELEMENTOS POR INCLUSAO
		NNINC(IINCL)= NPAR
		
		c=1.d0/NPAR
	
		nna= nna0 + NPAR

		N_Eq = N_Eq + 2*npar
c       NE=N

		if(N_Eq.gt.nx) THEN 
			!  write(*,*)'N= ',N_Eq,'NX= ',NX
			stop'N (Neq) maior que NX em geracont '
		ENDIF
		

		do iel=1,(NPAR-1)
			sel(iel)=iel*c
		end do   

C     Calcula os t dos elementos (tel) com base nos SEL
C     (comprimentos relativos prescritos acumulados)

		tel(1)=0.d0
		tel(NPAR+1)=nk-1
		it=1
		do iel=2,NPAR
			xl= sel(iel-1)*xlac(nt)
 1       		if (xl.gt.xlac(it)) then
				it=it+1
				go to 1
			end if
			tel(iel) = dlt*((it-2) + 
     &                 (xl-xlac(it-1))/(xlac(it)-xlac(it-1)))
       		end do

		idadossensib = 1 ! salva dados uteis para calculo das sensibilidades
		call xsplxy(xk,yk,sk,tel,X(nna0+1),Y(nna0+1),nk,NPAR+1,
     & 			nna0,nfix,npa0-npi,idadossensib)	
! 		call xsplxy(xk,yk,sk,tel,X(nna0+1),Y(nna0+1),nk,NPAR+1,
!      & 			nna0,nfix,npa0-npi,idadossensib)	



		do i=1,NPAR
			INC(nna0+i,1)= nna0 + i
			INC(nna0+i,2)= nna0 + i + 1
		end do
         
		INC(nna,2)= nna0 + 1	


      		WRITE(FRES,10)
 10   		FORMAT(//2X,'COORDENADAS DOS PONTOS EXTREMOS DOS ELEMENTOS DE ',
     & 'CONTORNO MOVEIS',//4X,'PONTOS',10X,'X',18X,'Y')

		DO I=nna0+1,nna
			WRITE(FRES,700)I,X(I),Y(I)
 700      		FORMAT(5X,I3,2(5X,E14.7))
		END DO

		WRITE(FRES,20)
 20 		FORMAT(//2X,'INCIDENCIA DOS ELEMENTOS MOVEIS',//4X,'ELEMENTO',5X,
     & 'NO INICIAL',5X,'NO FINAL',5x,'COMPRIMENTO')

		DO I=nna0+1,nna
			dx= x(inc(i,2)) - x(inc(i,1))
			dy= y(inc(i,2)) - y(inc(i,1))
			xl = sqrt(dx*dx + dy*dy)
			WRITE(FRES,710) I, INC(I,1), INC(I,2), xl
 710     		FORMAT(6X,I3,12X,I3,9X,I3,5X,F12.4)
		END DO
  
C     Atualiza o numero de n�s anterior e o numero de equa�oes
		nna0= nna0 + npar

! 		NNINCaux(iincl) = NNINC(iincl) !dado auxiliar para common

c     finaliza o loop sobre as inclusoes
	enddo

! 	do i=1,npa0
! 		write(*,11)(dQdt(i,j),j=1,numpar)
!  11 		format(15f10.3)
! 	enddo
! 	NINCLaux = NINCL !dado auxiliar para common

C     Define o numero final de nos como o numero de nos acumulado
	NN  = nna

	return
	end
